//
//  LZTableViewAdapter.m
//  TeacherNet
//
//  Created by slz on 2018/1/7.
//  Copyright © 2018年 bnsr. All rights reserved.
//

#import "LZTableViewAdapter.h"

@interface LZTableViewAdapter()<UITableViewDataSource, UITableViewDelegate>
{
    //    BOOL _refreshError;
}

@end

@implementation LZTableViewAdapter
- (id)init
{
    self = [super init];
    if (self)
    {
        _refreshLoading = NO;
        _refreshError   = NO;
        _hasBinded = NO;
        _emptyCellReceiveClick = YES;
        _emptyCellHeight = 0;
        _emptyCell  = [[TGMTableEmptyCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TGMTableEmptyCell"];
       
        //        默认图在emptyCell设置
        //        if (IS_IPAD)
        //        {
        //            self.emptyContentImage = [UIImage imageNamed:@"img_nodownload"];
        //        }
        //        else
        //        {
        //            self.emptyContentImage = [UIImage imageNamed:@"re_load"];
        //        }
        
    }
    return self;
}

- (BOOL)hasBinded
{
    return _tableView && _hasBinded;
}

- (void)bindTableView:(UITableView *)tableview
{
    NSAssert([NSThread isMainThread], @"MUST BIND IN MAIN THREAD!!!");
    _hasBinded = YES;
    _tableView = tableview;
    _scrollView = tableview;
    
    _tableView.delegate = self;
    _tableView.dataSource = self;
    
//        if ([self shouldModelInitRefresh])
//        {
//            _refreshLoading = YES;
//            [self triggerModelInitRefresh];
//        }
}

- (void)bindTableView:(UITableView*)tableview
           emptyImage:(UIImage*)emptyImage
            emptyText:(NSString*)emptyText
{
    self.emptyContentImage = emptyImage;
    self.emptyContentText = emptyText;
    [self bindTableView:tableview];
}


//- (void)requestRefresh
//{
//    [super requestRefresh];
//
//    if (self.currentOperationTask)
//    {
//        _emptyCell.state = EmptyCellState_Loading;
//    }
//
//    [_tableView reloadData];
//}

- (void)dealloc
{
    if (_tableView.delegate == self)
    {
        _tableView.delegate = nil;
    }
    if (_tableView.dataSource == self)
    {
        _tableView.dataSource = nil;
    }
    
//    [[_model class] removeDataObserver:self];
//    if (self.currentOperationTask)
//    {
//        [self.currentOperationTask cancel];
//        self.currentOperationTask = nil;
//    }
}

#pragma mark - UITableViewDataSource & UITableViewDelegate

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    NSArray *listData = self.listData;
    NSInteger count = [listData count];
    if (count == 0) {
        return 1;
    }
    
    return [self model2UITableView_numberOfSectionsInTableView:tableView];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
{
    NSArray *listData = self.listData;
    NSInteger count = [listData count];
//
//    if (count == 0 && section == 0)
//    {
//        count = 1;//emptycell
//    }
//    else
//    {
        count = [self model2UITableView: tableView numberOfRowsInSection: section];
//    }
    return count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    return [self model2UITableView:tableView cellForRowAtIndexPath:indexPath];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    return [self model2UITableView:tableView heightForRowAtIndexPath:indexPath];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 具体业务处理
    if ([self model2UITableView:tableView didSelectRowAtIndexPath:indexPath])
    {
        return;
    }
    else
    {
        //业务公共处理
    }
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
  
}
/*
 为了业务 将此处的[self.listData count] 判断去掉
 只要子类实现了这个方法 就必须在调用之前判断 int count = [self.listData count] ＝＝ 0;
 进行风险预防
 */
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    //    int count = [self.listData count];
    //    if (count == 0)
    //    {
    //        return nil;
    //    }
    return [self model2UITableView:tableView viewForHeaderInSection:section];
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    //    int count = [self.listData count];
    //    if (count == 0)
    //    {
    //        return 0.001;
    //    }
    return [self model2UITableView:tableView heightForHeaderInSection:section];
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    //    int count = [self.listData count];
    //    if (count == 0)
    //    {
    //        return nil;
    //    }
    return [self model2UITableView:tableView viewForFooterInSection:section];
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    //    int count = [self.listData count];
    //    if (count == 0)
    //    {
    //        return 0.001;
    //    }
    return [self model2UITableView:tableView heightForFooterInSection:section];
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
    return [self model2UITableView:tableView canEditRowAtIndexPath:indexPath];
}


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    [self model2UITableView:tableView commitEditingStyle:editingStyle forRowAtIndexPath:indexPath];
}

-(void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    
}

- (NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView{
    return [self model2SectionIndexTitlesForTableView:tableView];
}


- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
    return [self model2TableView:tableView sectionForSectionIndexTitle:title atIndex:index];
}

#pragma mark - Transfer to UITableViewDataSource & UITableViewDelegate

- (NSInteger)model2TableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
    return index;
}

- (NSArray<NSString *> *)model2SectionIndexTitlesForTableView:(UITableView *)tableView{
    return nil;
}

- (void)model2UITableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    
}

- (void)model2UITableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    
}

- (BOOL)model2UITableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
    return NO;
}

- (NSInteger)model2UITableView_numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)model2UITableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.listData count];
}

- (UITableViewCell *)model2UITableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
    return nil;
}

- (CGFloat)model2UITableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    return 0;
}

- (BOOL)model2UITableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    return NO;
}

- (void)model2UITableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    
}

- (UIView *)model2UITableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    return nil;
}

- (CGFloat)model2UITableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 0;
}

- (UIView *)model2UITableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    return nil;
}

- (CGFloat)model2UITableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 0;
}

- (CGFloat)model2UITableView_heightForNoMoreDataCell:(UITableView *)tableView
{
    return 0;
}

#pragma mark - Transfer to UIScrollViewDelegate

- (void)model2TableViewDidScroll:(UIScrollView*)scrollView;
{
    
}
- (void)model2TableViewWillBeginDragging:(UIScrollView *)scrollView;
{
    
}
- (void)model2TableViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
{
    
}
- (void)model2TableViewWillBeginDecelerating:(UIScrollView *)scrollView;
{
    
}
- (void)model2TableViewDidEndDecelerating:(UIScrollView *)scrollView;
{
    
}
- (void)model2TableViewDidEndScrollingAnimation:(UIScrollView *)scrollView;
{
    
}
#pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
{
    // @override
    [super scrollViewDidScroll:scrollView];
    
    [self model2TableViewDidScroll:scrollView];
}

// called on start of dragging (may require some time and or distance to move)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
{
    [self model2TableViewWillBeginDragging:scrollView];
}

// called on finger up if the user dragged. decelerate is true if it will continue moving afterwards
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
{
    [self model2TableViewDidEndDragging:scrollView willDecelerate:decelerate];
}

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;   // called on finger up as we are moving
{
    [self model2TableViewWillBeginDecelerating:scrollView];
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;      // called when scroll view grinds to a halt
{
    // @override
    [super scrollViewDidEndDecelerating:scrollView];
    
//    if ([self supportGetMoreFooter] && [self hasMoreData] && [_getMoreCell superview])
//    {
//        CGRect rc = _getMoreCell.frame;
//        if(scrollView.contentOffset.y + scrollView.frame.size.height - rc.origin.y
//           > (rc.size.height * 0.8))
//        {
//            [self performSelector:@selector(requestGetMore) withObject:nil afterDelay:0.0f];
//        }
//    }
    
    [self model2TableViewDidEndDecelerating:scrollView];
}

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;
{
    [self model2TableViewDidEndScrollingAnimation:scrollView];
}

@end
